// ActionScript file


private var init_params:Object;

/*
 * ローカルデータベースの初期化を行う
 */

/**
 * 初期化処理開始
 */
private function initDbJSON():void
{
    Alert.show("データベースを初期化します。\nこの処理には数分かかる場合があります。\nまた、既存のデータは失われますが、よろしいですか？", "データベース初期化", 3, this, alertClickHandler);
}

/**
 * データベース初期化確認ダイアログのコールバック．
 * 
 * YESがクリックされた場合データベースを作成して，初期化を開始する
 */
private function alertClickHandler(event:CloseEvent):void
{
    //_localSo.flush();
    if (event.detail == Alert.YES) {
        viewstack1.selectedChild = loadingCanvas;// ローディング画面を表示
        var create_flg:Boolean   = _generator.createDatabase(_databaseFile, 0);
        // DBが作られたらユーザマスタ読み込み
        if (create_flg) {
            init_params = new Object();
            init_params.login_id = _localSo.data.user_login_id;
            init_params.password = _localSo.data.user_password;
            initUsersJSON();
        } else {
            Alert.show("データベースの作成に失敗しました。", "ERROR!", Alert.OK);
        }
    }
}

/**
 * ユーザローカルデータベース初期化処理
 * ユーザ一覧を取得してデータベースに格納する
 */
private function initUsersJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_users";
    _service.method = "POST";
    _service.addEventListener("result", initUsersResult);
    _service.addEventListener("fault", initUsersFault);
    _service.send(init_params);
}
/**
 * ユーザ一覧取得成功時のコールバック
 * ユーザ一覧の取得に成功したら，ローカルデータベースに取得したユーザの一覧を格納する．
 * 格納が完了したら，プロジェクト一覧の初期化に移行
 */
public function initUsersResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　10%";
    var rawData:String   = String(event.result);
    var users:Object     = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertUsers(users.result.items);
    
    initProjectsJSON();
}
/**
 * ユーザ一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initUsersFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * プロジェクトローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initProjectsJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_projects";
    _service.method = "POST";
    _service.addEventListener("result", initProjectsResult);
    _service.addEventListener("fault", initProjectsFault);
    _service.send(init_params);
}

/**
 * プロジェクト一覧取得成功時のコールバック
 * プロジェクト一覧の取得に成功したら，ローカルデータベースに取得したプロジェクトの一覧を格納する．
 * 格納が完了したら，プロジェクトユーザの初期化に移行
 */
public function initProjectsResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　20%";
    var rawData:String   = String(event.result);
    var users:Object     = JSON.decode(rawData);
    _projects.connect(_databaseFile)
    _projects.insertProjects(users.result.items);

    initProjectUsersJSON();
}
/**
 * プロジェクト一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initProjectsFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * プロジェクトユーザローカルデータベース初期化処理
 * プロジェクト参加中のユーザ一覧を取得してデータベースに格納する
 */
private function initProjectUsersJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_project_users";
    _service.method = "POST";
    _service.addEventListener("result", initProjectUsersResult);
    _service.addEventListener("fault", initProjectUsersFault);
    _service.send(init_params);
}
/**
 * プロジェクト参加ユーザ一覧取得成功時のコールバック
 * ユーザ一覧の取得に成功したら，ローカルデータベースに取得したユーザの一覧を格納する．
 * 格納が完了したら，プロジェクト構成データの初期化に移行
 */
public function initProjectUsersResult(event:ResultEvent):void
{
    initLoadingBar.label    = "初期化中　30%";
    var rawData:String      = String(event.result);
    var projectusers:Object = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertProjectUsers(projectusers.result.items);
    
    initProjectCompsJSON();
}
/**
 * プロジェクトユーザ一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initProjectUsersFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * プロジェクト構成データローカルデータベース初期化処理
 * プロジェクト構成データ覧を取得してデータベースに格納する
 */
private function initProjectCompsJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_project_comps";
    _service.method = "POST";
    _service.addEventListener("result", initProjectCompsResult);
    _service.addEventListener("fault", initProjectCompsFault);
    _service.send(init_params);
}
/**
 * プロジェクト構成データ取得成功時のコールバック
 * プロジェクト構成データの取得に成功したら，ローカルデータベースに取得した構成データを格納する．
 * 格納が完了したら，プロジェクトログの初期化に移行
 */
public function initProjectCompsResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　40%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile)
    _projects.insertProjectComps(projects.result.items);
    
    initProjectLogsJSON();
}
/**
 * プロジェクト構成データ取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initProjectCompsFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * プロジェクトログローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initProjectLogsJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_project_logs";
    _service.method = "POST";
    _service.addEventListener("result", initProjectLogsResult);
    _service.addEventListener("fault", initProjectLogsFault);
    _service.send(init_params);
}
/**
 * プロジェクトログ取得成功時のコールバック
 * プロジェクトログの取得に成功したら，ローカルデータベースに取得したログの一覧を格納する．
 * 格納が完了したら，タスク一覧の初期化に移行
 */
public function initProjectLogsResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　50%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertProjectLogs(projects.result.items);

    initTasksJSON();
}
/**
 * プロジェクトログ一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initProjectLogsFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * タスクローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initTasksJSON():void
{
    _service = new HTTPService();
    _service.url = _serverUrl + "extensions/air/json_init_tasks";
    _service.method = "POST";
    _service.addEventListener("result", initTasksResult);
    _service.addEventListener("fault", initTasksFault);
    _service.send(init_params);
}
/**
 * タスク一覧取得成功時のコールバック
 * タスク一覧の取得に成功したら，ローカルデータベースに取得したタスクの一覧を格納する．
 * 格納が完了したら，タスクユーザの初期化に移行
 */
public function initTasksResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　60%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertTasks(projects.result.items);

    initTaskusersJSON();
}
/**
 * タスク一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initTasksFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}


/**
 * タスクユーザローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initTaskusersJSON():void
{
    _service = new HTTPService();
    _service.url = _serverUrl + "extensions/air/json_init_taskusers";
    _service.method = "POST";
    _service.addEventListener("result", initTaskusersResult);
    _service.addEventListener("fault", initTaskusersFault);
    _service.send(init_params);
}
/**
 * ユーザ一覧取得成功時のコールバック
 * ユーザ一覧の取得に成功したら，ローカルデータベースに取得したユーザの一覧を格納する．
 * 格納が完了したら，マイルストーン一覧の初期化に移行
 */
public function initTaskusersResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　70%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertTaskusers(projects.result.items);

    initMilestonesJSON();
}
/**
 * タスクユーザ一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initTaskusersFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * マイルストーンローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initMilestonesJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_milestones";
    _service.method = "POST";
    _service.addEventListener("result", initMilestonesResult);
    _service.addEventListener("fault", initMilestonesFault);
    _service.send(init_params);
}
/**
 * マイルストーン一覧取得成功時のコールバック
 * マイルストーン一覧の取得に成功したら，ローカルデータベースに取得したマイルストーンの一覧を格納する．
 * 格納が完了したら，イベント一覧の初期化に移行
 */
public function initMilestonesResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　80%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertMilestones(projects.result.items);

    initEventsJSON();
}
/**
 * マイルストーン一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initMilestonesFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * イベントローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initEventsJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_events";
    _service.method = "POST";
    _service.addEventListener("result", initEventsResult);
    _service.addEventListener("fault", initEventsFault);
    _service.send(init_params);
}
/**
 * イベント一覧取得成功時のコールバック
 * イベント一覧の取得に成功したら，ローカルデータベースに取得したイベントの一覧を格納する．
 * 格納が完了したら，イベント一覧の初期化に移行
 */
public function initEventsResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　90%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertEvents(projects.result.items);

    initEventusersJSON();
}
/**
 * イベント一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initEventsFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * イベントユーザローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initEventusersJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_eventusers";
    _service.method = "POST";
    _service.addEventListener("result", initEventusersResult);
    _service.addEventListener("fault", initEventusersFault);
    _service.send(init_params);
}
/**
 * イベントユーザ一覧取得成功時のコールバック
 * イベントユーザ一覧の取得に成功したら，ローカルデータベースに取得したイベントユーザの一覧を格納する．
 * 格納が完了したら，イベントユーザ一覧の初期化に移行
 */
public function initEventusersResult(event:ResultEvent):void
{
    initLoadingBar.label = "初期化中　95%";
    var rawData:String   = String(event.result);
    var projects:Object  = JSON.decode(rawData);
    _projects.connect(_databaseFile);
    _projects.insertEventusers(projects.result.items);
    // dat_eventusersを取得したらmst_messages取得
    
    initMessageJSON();
}
/**
 * イベントユーザ一覧取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initEventusersFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * ローカライズメッセージローカルデータベース初期化処理
 * プロジェクト一覧を取得してデータベースに格納する
 */
private function initMessageJSON():void
{
    _service = new HTTPService();
    _service.url    = _serverUrl + "extensions/air/json_init_messages";
    _service.method = "POST";
    _service.addEventListener("result", initMessageResult);
    _service.addEventListener("fault", initMessageFault);
    _service.send(init_params);
}
/**
 * ローカライズメッセージ取得成功時のコールバック
 * ローカライズメッセージ一覧の取得に成功したら，ローカルデータベースに取得したローカライズメッセージの一覧を格納する．
 * 格納が完了したら，初期化処理完了に移行
 */
public function initMessageResult(event:ResultEvent):void
{
    var rawData:String  = String(event.result);
    var projects:Object = JSON.decode(rawData);
    _projects.connect(_databaseFile)
    _projects.insertMessages(projects.result.items)
    initLoadingBar.label = "初期化中　100%";
    loadedServerData();
}
/**
 * ローカライズメッセージ取得失敗時のコールバック．
 * アラートを表示して初期化を終了
 */
public function initMessageFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    _internal_serber_error();
}

/**
 * データベース初期化完了処理．
 * 初期化が完了したら，プロジェクト一覧に遷移．
 */
private function loadedServerData():void
{
    Alert.show("データベースの初期化を完了しました。", "完了", Alert.OK);
    if (_localSo) {
        //_localSo.clear();
    }
    showProjectCanvas();
}


private function _internal_serber_error():void
{
    var message:String = ERROR_INTERNAL_SERVER_ERROR + "\n";
    //message += MESSAGE_APPLICATION_EXIT;
    //message += MESSAGE_RETURN_LOGIN;
    Alert.show(message, "サーバエラー", 3, this, _return_login);
}

private function _application_exit(event:CloseEvent):void
{
    this.stage.nativeWindow.close();
}

private function _return_login(event:CloseEvent):void
{
    viewstack1.selectedChild = loginCanvas;
}

